#include "lua_native_binding.hpp"
#include "natives.hpp"

namespace lua::native
{
	static void LUA_NATIVE_RECORDING_REPLAY_START_EVENT(int p0)
	{
		RECORDING::REPLAY_START_EVENT(p0);
	}

	static void LUA_NATIVE_RECORDING_REPLAY_STOP_EVENT()
	{
		RECORDING::REPLAY_STOP_EVENT();
	}

	static void LUA_NATIVE_RECORDING_REPLAY_CANCEL_EVENT()
	{
		RECORDING::REPLAY_CANCEL_EVENT();
	}

	static void LUA_NATIVE_RECORDING_REPLAY_RECORD_BACK_FOR_TIME(float p0, float p1, int p2)
	{
		RECORDING::REPLAY_RECORD_BACK_FOR_TIME(p0, p1, p2);
	}

	static void LUA_NATIVE_RECORDING_REPLAY_CHECK_FOR_EVENT_THIS_FRAME(sol::stack_object missionNameLabel, Any p1)
	{
		RECORDING::REPLAY_CHECK_FOR_EVENT_THIS_FRAME(missionNameLabel.is<const char*>() ? missionNameLabel.as<const char*>() : nullptr, p1);
	}

	static void LUA_NATIVE_RECORDING_REPLAY_PREVENT_RECORDING_THIS_FRAME()
	{
		RECORDING::REPLAY_PREVENT_RECORDING_THIS_FRAME();
	}

	static void LUA_NATIVE_RECORDING_REPLAY_RESET_EVENT_INFO()
	{
		RECORDING::REPLAY_RESET_EVENT_INFO();
	}

	static void LUA_NATIVE_RECORDING_REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME()
	{
		RECORDING::REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME();
	}

	static void LUA_NATIVE_RECORDING_RECORD_GREATEST_MOMENT(int p0, int p1, int p2)
	{
		RECORDING::RECORD_GREATEST_MOMENT(p0, p1, p2);
	}

	static void LUA_NATIVE_RECORDING_START_REPLAY_RECORDING(int mode)
	{
		RECORDING::START_REPLAY_RECORDING(mode);
	}

	static void LUA_NATIVE_RECORDING_STOP_REPLAY_RECORDING()
	{
		RECORDING::STOP_REPLAY_RECORDING();
	}

	static void LUA_NATIVE_RECORDING_CANCEL_REPLAY_RECORDING()
	{
		RECORDING::CANCEL_REPLAY_RECORDING();
	}

	static bool LUA_NATIVE_RECORDING_SAVE_REPLAY_RECORDING()
	{
		auto retval = (bool)RECORDING::SAVE_REPLAY_RECORDING();
		return retval;
	}

	static bool LUA_NATIVE_RECORDING_IS_REPLAY_RECORDING()
	{
		auto retval = (bool)RECORDING::IS_REPLAY_RECORDING();
		return retval;
	}

	static bool LUA_NATIVE_RECORDING_IS_REPLAY_INITIALIZED()
	{
		auto retval = (bool)RECORDING::IS_REPLAY_INITIALIZED();
		return retval;
	}

	static bool LUA_NATIVE_RECORDING_IS_REPLAY_AVAILABLE()
	{
		auto retval = (bool)RECORDING::IS_REPLAY_AVAILABLE();
		return retval;
	}

	static bool LUA_NATIVE_RECORDING_IS_REPLAY_RECORD_SPACE_AVAILABLE(bool p0)
	{
		auto retval = (bool)RECORDING::IS_REPLAY_RECORD_SPACE_AVAILABLE(p0);
		return retval;
	}

	void init_native_binding_RECORDING(sol::state& L)
	{
		auto RECORDING = L["RECORDING"].get_or_create<sol::table>();
		RECORDING.set_function("REPLAY_START_EVENT", LUA_NATIVE_RECORDING_REPLAY_START_EVENT);
		RECORDING.set_function("REPLAY_STOP_EVENT", LUA_NATIVE_RECORDING_REPLAY_STOP_EVENT);
		RECORDING.set_function("REPLAY_CANCEL_EVENT", LUA_NATIVE_RECORDING_REPLAY_CANCEL_EVENT);
		RECORDING.set_function("REPLAY_RECORD_BACK_FOR_TIME", LUA_NATIVE_RECORDING_REPLAY_RECORD_BACK_FOR_TIME);
		RECORDING.set_function("REPLAY_CHECK_FOR_EVENT_THIS_FRAME", LUA_NATIVE_RECORDING_REPLAY_CHECK_FOR_EVENT_THIS_FRAME);
		RECORDING.set_function("REPLAY_PREVENT_RECORDING_THIS_FRAME", LUA_NATIVE_RECORDING_REPLAY_PREVENT_RECORDING_THIS_FRAME);
		RECORDING.set_function("REPLAY_RESET_EVENT_INFO", LUA_NATIVE_RECORDING_REPLAY_RESET_EVENT_INFO);
		RECORDING.set_function("REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME", LUA_NATIVE_RECORDING_REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME);
		RECORDING.set_function("RECORD_GREATEST_MOMENT", LUA_NATIVE_RECORDING_RECORD_GREATEST_MOMENT);
		RECORDING.set_function("START_REPLAY_RECORDING", LUA_NATIVE_RECORDING_START_REPLAY_RECORDING);
		RECORDING.set_function("STOP_REPLAY_RECORDING", LUA_NATIVE_RECORDING_STOP_REPLAY_RECORDING);
		RECORDING.set_function("CANCEL_REPLAY_RECORDING", LUA_NATIVE_RECORDING_CANCEL_REPLAY_RECORDING);
		RECORDING.set_function("SAVE_REPLAY_RECORDING", LUA_NATIVE_RECORDING_SAVE_REPLAY_RECORDING);
		RECORDING.set_function("IS_REPLAY_RECORDING", LUA_NATIVE_RECORDING_IS_REPLAY_RECORDING);
		RECORDING.set_function("IS_REPLAY_INITIALIZED", LUA_NATIVE_RECORDING_IS_REPLAY_INITIALIZED);
		RECORDING.set_function("IS_REPLAY_AVAILABLE", LUA_NATIVE_RECORDING_IS_REPLAY_AVAILABLE);
		RECORDING.set_function("IS_REPLAY_RECORD_SPACE_AVAILABLE", LUA_NATIVE_RECORDING_IS_REPLAY_RECORD_SPACE_AVAILABLE);
	}
}
